অ্যাপাচি অ্যাকটিভএমকিউ হলো একটি ওপেন সোর্স মেসেজ ব্রোকার সিস্টেম যা বিভিন্ন অ্যাপ্লিকেশন ও সিস্টেমের মধ্যে মেসেজ আদান-প্রদানকে সহজ এবং নিরাপদ করে। এটি মূলত মেসেজিং সিস্টেমের জন্য ব্যবহৃত হয়, যেখানে এক বা একাধিক প্রোডিউসার এবং কনসিউমার মেসেজ আদান-প্রদান করতে পারে। অ্যাপাচি অ্যাকটিভএমকিউ এর বেসিক কনসেপ্টগুলো বুঝে নেওয়া খুবই গুরুত্বপূর্ণ, যাতে আপনি সিস্টেমটি সঠিকভাবে ব্যবহার করতে পারেন।
মেসেজ হল অ্যাপাচি অ্যাকটিভএমকিউ এর মধ্যে ডেটার একক এক্সচেঞ্জ। মেসেজ সাধারণত তিনটি প্রধান উপাদান নিয়ে গঠিত:
কিউ হলো একটি FIFO (First In, First Out) ডেটা স্ট্রাকচার যেখানে মেসেজগুলো রাখা হয়। এটি পয়েন্ট-টু-পয়েন্ট মেসেজিং মডেল (Point-to-Point Messaging Model) এর জন্য ব্যবহৃত হয়, যেখানে এক প্রোডিউসার মেসেজ তৈরি করে এবং এক বা একাধিক কনসিউমার সেই মেসেজ গ্রহণ করে। কিউতে যে মেসেজ প্রথমে পৌঁছায়, সেটি প্রথমে কনসিউম করা হবে।
টপিক হলো একটি পাবলিশ-অ্যান্ড-সাবস্ক্রাইব মেসেজিং মডেল (Publish-and-Subscribe Messaging Model) এর অংশ, যেখানে প্রোডিউসার একটি মেসেজ একাধিক সাবস্ক্রাইবারকে পাঠাতে পারে। এখানে, একাধিক কনসিউমার একই মেসেজ গ্রহণ করতে পারে। এটি সাধারণত ব্রডকাস্ট মেসেজিং ব্যবহারের জন্য ব্যবহৃত হয়।
পোস্টিং বা প্রোডিউসার (Producer) হলো সেই কম্পোনেন্ট যা মেসেজ তৈরি করে এবং এটি অ্যাকটিভএমকিউ ব্রোকারে পাঠায়। একটি প্রোডিউসার এক বা একাধিক কিউ বা টপিকে মেসেজ পোষ্ট করতে পারে।
সাবস্ক্রাইবার (Consumer) হলো সেই কম্পোনেন্ট যা মেসেজ গ্রহণ করে। এটি এমন একটি অ্যাপ্লিকেশন হতে পারে যা মেসেজ কনসিউম বা প্রক্রিয়া করে। সাবস্ক্রাইবার একাধিক কিউ বা টপিক থেকে মেসেজ গ্রহণ করতে পারে।
ব্রোকার হলো অ্যাপাচি অ্যাকটিভএমকিউ এর কেন্দ্রীয় কম্পোনেন্ট, যা মেসেজ গ্রহণ এবং রাউটিং করার কাজ করে। এটি কিউ বা টপিকের মাধ্যমে মেসেজগুলিকে প্রোডিউসার থেকে কনসিউমারের কাছে পাঠায়। ব্রোকার ক্লায়েন্টদের মধ্যে মেসেজ আদান-প্রদান নিশ্চিত করে।
অ্যাপাচি অ্যাকটিভএমকিউ বিভিন্ন ট্রান্সপোর্ট প্রোটোকল যেমন TCP, SSL, HTTP, UDP ইত্যাদি সমর্থন করে। ট্রান্সপোর্ট প্রোটোকলগুলি মেসেজের আদান-প্রদান নিশ্চিত করতে ক্লায়েন্ট এবং ব্রোকারের মধ্যে যোগাযোগ স্থাপন করে।
অ্যাপাচি অ্যাকটিভএমকিউ দুটি প্রধান মেসেজিং মডেল ব্যবহার করে:
এই মডেলে, একটি প্রোডিউসার একটি মেসেজ একটি কিউতে পোষ্ট করে এবং শুধুমাত্র এক বা একাধিক কনসিউমার সেই মেসেজ গ্রহণ করে। এটি "কিউ" ভিত্তিক সিস্টেম যেখানে মেসেজ একবার কনসিউম হলে, তা আর পুনরায় প্রক্রিয়া করা যায় না।
এই মডেলে, একটি প্রোডিউসার একটি টপিকের মাধ্যমে একাধিক কনসিউমারকে একই মেসেজ পাঠায়। এটি "টপিক" ভিত্তিক সিস্টেম যেখানে একাধিক কনসিউমার একই মেসেজ গ্রহণ করতে পারে। এটি ব্রডকাস্ট মেসেজিং এর জন্য ব্যবহার করা হয়।
অ্যাপাচি অ্যাকটিভএমকিউ এর বেসিক কনসেপ্টগুলো মেসেজিং সিস্টেমের কার্যপ্রণালীকে সহজ এবং কার্যকরী করে তোলে। এখানে প্রোডিউসার মেসেজ তৈরি করে এবং ব্রোকারের মাধ্যমে কিউ বা টপিকের মাধ্যমে কনসিউমারের কাছে পৌঁছায়। কিউ এবং টপিক দুটি মেসেজিং মডেল দ্বারা মেসেজ আদান-প্রদান নিশ্চিত হয়। এর মাধ্যমে বিভিন্ন ডিস্ট্রিবিউটেড সিস্টেম এবং অ্যাপ্লিকেশনগুলির মধ্যে নিরাপদ এবং দ্রুত ডেটা শেয়ার করা সম্ভব হয়।
অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) দুটি প্রধান মেসেজিং মডেল সাপোর্ট করে: Queue এবং Topic। এই দুটি মডেল ডিস্ট্রিবিউটেড সিস্টেমে মেসেজিং সিস্টেমের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। তবে, Queue এবং Topic এর মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, যা তাদের ব্যবহার এবং কার্যকারিতাকে পৃথক করে।
Queue মেসেজিং মডেল Point-to-Point (P2P) মডেল নামে পরিচিত। এটি একক প্রযোজক (Producer) এবং একক ভোক্তা (Consumer) এর মধ্যে মেসেজের আদান-প্রদান নিশ্চিত করে।
Topic মেসেজিং মডেল Publish-Subscribe (Pub-Sub) মডেল নামে পরিচিত। এটি একাধিক প্রযোজক এবং একাধিক ভোক্তার মধ্যে মেসেজের আদান-প্রদান নিশ্চিত করে।
বৈশিষ্ট্য | Queue | Topic |
---|---|---|
মেসেজিং মডেল | Point-to-Point (P2P) | Publish-Subscribe (Pub-Sub) |
কনজিউমার | একক কনজিউমার মেসেজ গ্রহণ করে। | একাধিক কনজিউমার একই মেসেজ গ্রহণ করতে পারে। |
মেসেজ প্রসেসিং | মেসেজ একে একে প্রসেস হয়। | মেসেজ একাধিক কনজিউমারদের মধ্যে ভাগ করা হয়। |
পাঠানো মেসেজ | এক মেসেজ একটি কনজিউমারের কাছে পাঠানো হয়। | এক মেসেজ একাধিক কনজিউমারের কাছে পাঠানো হয়। |
ডুরেবিলিটি | ডুরেবল কিউ সমর্থন করে, যাতে মেসেজ হারানো যায় না। | ডুরেবল সাবস্ক্রিপশন সমর্থন করে, তবে সাধারণত ডুরেবল নয়। |
ব্যবহার | একক প্রক্রিয়ায় মেসেজ প্রসেসিং (যেমন অর্ডার প্রক্রিয়া)। | একাধিক সাবস্ক্রাইবারদের জন্য মেসেজ সম্প্রচার (যেমন খবর বা স্টক টিপস)। |
Queue এবং Topic এর মধ্যে মূল পার্থক্য হল মেসেজের প্রসেসিং এবং মেসেজের গ্রহণকারী। Queue মডেল একক কনজিউমারের জন্য মেসেজ প্রসেসিং নিশ্চিত করে, যেখানে মেসেজগুলি একে একে গ্রহণ করা হয়। অন্যদিকে, Topic মডেল একাধিক কনজিউমারের মধ্যে মেসেজ ভাগ করে দেয়, এবং এটি মূলত Publish-Subscribe মডেল অনুসরণ করে, যেখানে একাধিক সাবস্ক্রাইবার একই মেসেজ গ্রহণ করে।
অ্যাপাচি অ্যাকটিভএমকিউ দুটি মূল মেসেজিং মডেল সমর্থন করে: Point-to-Point (P2P) এবং Publish/Subscribe। এই দুটি মডেল মেসেজিং সিস্টেমের মাধ্যমে তথ্য আদান-প্রদান করার আলাদা পদ্ধতি এবং সুবিধা প্রদান করে। প্রতিটি মডেল বিভিন্ন পরিস্থিতিতে ব্যবহৃত হয় এবং এর নিজস্ব কার্যকারিতা ও সুবিধা রয়েছে।
Point-to-Point মডেল হল একটি সরল মেসেজিং প্যাটার্ন যেখানে এক প্রোডিউসার (Producer) থেকে মেসেজ সরাসরি একটি কিউ (Queue) তে পাঠানো হয় এবং এক কনজিউমার (Consumer) সেই মেসেজ গ্রহণ করে। এই মডেলটি FIFO (First In, First Out) পদ্ধতিতে কাজ করে, অর্থাৎ প্রথমে যে মেসেজ আসবে সেটি প্রথমে কনজিউমার দ্বারা প্রক্রিয়া করা হবে।
Publish/Subscribe মডেলটি একটি পাবলিশ-সাবস্ক্রাইব প্যাটার্ন অনুসরণ করে, যেখানে একটি প্রোডিউসার (Publisher) মেসেজ একটি টপিক (Topic) তে পাঠায়, এবং একাধিক কনজিউমার (Subscriber) সেই টপিককে সাবস্ক্রাইব করে মেসেজ গ্রহণ করে। এই মডেলটি একাধিক কনজিউমারকে একই মেসেজ প্রেরণের সুবিধা দেয়।
এই দুটি মডেল মেসেজিং সিস্টেমের মধ্যে যোগাযোগের সঠিক উপায় নির্বাচন করতে সাহায্য করে, যেহেতু প্রতিটি মডেল বিভিন্ন প্রকারের ব্যবহারের জন্য উপযুক্ত।
অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) মেসেজ ব্রোকারের মাধ্যমে মেসেজের প্রেরণ এবং গ্রহণের সময়, মেসেজের দীর্ঘস্থায়িতা (Persistence) একটি গুরুত্বপূর্ণ বিষয়। এটি নির্ধারণ করে যে মেসেজগুলি ডিফল্টভাবে কিউ বা টপিকে কতদিন থাকবে এবং সিস্টেম বন্ধ হওয়ার পরও সেগুলি কি সংরক্ষিত থাকবে। অ্যাকটিভএমকিউ মেসেজ ডেলিভারি দুইটি প্রধান মোডে পরিচালনা করে: Persistent এবং Non-persistent।
Persistent মেসেজ ডেলিভারি মোড নিশ্চিত করে যে মেসেজটি একবার পাঠানো হলে, সেটি ডাটাবেস বা ফাইল সিস্টেমে সেভ হয়ে যাবে এবং ব্রোকারের রিস্টার্ট বা সিস্টেম ক্র্যাশের পরও মেসেজটি হারিয়ে যাবে না। এই মোডে পাঠানো মেসেজগুলি দীর্ঘস্থায়ী (Persistent) হয়ে থাকে এবং তাদের ডেটা সিস্টেম বন্ধ বা ক্র্যাশ হওয়ার পরও পুনরুদ্ধার করা যায়।
import javax.jms.*;
public class PersistentMessageProducer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST_QUEUE");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); // Persistent Delivery Mode
TextMessage message = session.createTextMessage("This is a persistent message.");
producer.send(message);
System.out.println("Persistent message sent: " + message.getText());
connection.close();
}
}
উপরের কোডে, মেসেজটির ডেলিভারি মোড Persistent হিসেবে সেট করা হয়েছে, যার ফলে মেসেজটি ডাটাবেসে বা ফাইল সিস্টেমে সংরক্ষিত হবে।
Non-persistent মেসেজ ডেলিভারি মোডে, মেসেজটি পাঠানোর পর তা কোন স্থায়ী স্টোরেজে সংরক্ষিত হয় না। এটি শুধুমাত্র মেমরি বা টেম্পোরারি স্টোরেজে রক্ষা পায় এবং সিস্টেম বন্ধ বা ক্র্যাশ হলে মেসেজটি হারিয়ে যায়। এই মোডটি সাধারণত পারফরম্যান্স বৃদ্ধি করতে ব্যবহৃত হয়, কারণ এতে ডেটা স্টোরেজের জন্য অতিরিক্ত সময় লাগে না।
import javax.jms.*;
public class NonPersistentMessageProducer {
public static void main(String[] args) throws JMSException {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("TEST_QUEUE");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // Non-persistent Delivery Mode
TextMessage message = session.createTextMessage("This is a non-persistent message.");
producer.send(message);
System.out.println("Non-persistent message sent: " + message.getText());
connection.close();
}
}
উপরের কোডে, মেসেজটির ডেলিভারি মোড Non-persistent হিসেবে সেট করা হয়েছে, যার ফলে মেসেজটি মেমরিতে সংরক্ষিত হবে এবং সিস্টেম বন্ধ হলে তা হারিয়ে যাবে।
বৈশিষ্ট্য | Persistent (স্থায়ী) | Non-persistent (অস্থায়ী) |
---|---|---|
সংরক্ষণ | ডাটাবেস বা ফাইল সিস্টেমে সংরক্ষিত | মেমরি বা টেম্পোরারি স্টোরেজে সংরক্ষিত |
নির্ভরযোগ্যতা | উচ্চ (মেসেজ ক্র্যাশ বা রিস্টার্টের পরও পাওয়া যায়) | কম (ক্র্যাশ হলে মেসেজ হারিয়ে যায়) |
পারফরম্যান্স | কম (স্টোরেজে সেভ করতে সময় নেয়) | উচ্চ (দ্রুত মেসেজ প্রেরণ) |
ব্যবহার | গুরুত্বপূর্ণ ডেটা বা মেসেজ যেখানে ডাটা হারানো যাবে না | কম গুরুত্বপূর্ণ ডেটা যেখানে দ্রুত প্রক্রিয়াকরণ প্রয়োজন |
অ্যাপাচি অ্যাকটিভএমকিউ মেসেজ ডেলিভারি মোড দুটি প্রদান করে: Persistent এবং Non-persistent। Persistent মোড মেসেজগুলো স্থায়ীভাবে সংরক্ষণ করে এবং সিস্টেমের রিস্টার্টের পরও তা পুনরুদ্ধার করা যায়, তবে এতে কিছুটা কম পারফরম্যান্স পাওয়া যায়। অপরদিকে, Non-persistent মোডে মেসেজগুলি দ্রুত প্রেরিত হয়, কিন্তু সিস্টেম বন্ধ হলে তা হারিয়ে যায়। অ্যাপ্লিকেশন বা সিস্টেমের প্রয়োজন অনুযায়ী মেসেজ ডেলিভারি মোড নির্বাচন করা উচিত।
অ্যাপাচি অ্যাকটিভএমকিউ একটি শক্তিশালী মেসেজ ব্রোকার যা মেসেজ প্রেরণ এবং গ্রহণের জন্য বিভিন্ন মেসেজ অ্যাকনলেজমেন্ট (Acknowledgment) মোড সমর্থন করে। Message Acknowledgment হচ্ছে একটি প্রক্রিয়া যা নিশ্চিত করে যে মেসেজ সফলভাবে গ্রহণ করা হয়েছে। অ্যাকনলেজমেন্ট মোড নির্ধারণ করে কিভাবে একটি মেসেজ কনজিউমার (Consumer) কর্তৃক অ্যাকনলেজ করা হবে এবং কবে তা মেসেজ ব্রোকার থেকে মুছে ফেলা হবে। অ্যাকনলেজমেন্ট মোডের সঠিক নির্বাচন মেসেজের প্রক্রিয়াকরণ এবং সিস্টেমের নির্ভরযোগ্যতা নিশ্চিত করতে সাহায্য করে।
অ্যাপাচি অ্যাকটিভএমকিউ বিভিন্ন ধরনের মেসেজ অ্যাকনলেজমেন্ট মোড সরবরাহ করে, যার মধ্যে কিছু নিচে আলোচনা করা হলো:
AUTO_ACKNOWLEDGE মোডে, যখন একটি মেসেজ কনজিউমার দ্বারা গ্রহণ করা হয়, তখন তা স্বয়ংক্রিয়ভাবে অ্যাকনলেজ হয়ে যায়। অর্থাৎ, কনজিউমার মেসেজ গ্রহণ করার পর, ActiveMQ মেসেজটি কনজিউমারের কাছে সফলভাবে পৌঁছানোর পরে অ্যাকনলেজ করে।
বৈশিষ্ট্য:
উদাহরণ:
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
CLIENT_ACKNOWLEDGE মোডে, কনজিউমারকে ম্যানুয়ালি মেসেজ অ্যাকনলেজ করতে হয়। অর্থাৎ, কনজিউমার যখন মেসেজ প্রক্রিয়া সম্পন্ন করবে, তখন সে নিজেই অ্যাকনলেজমেন্ট পাঠাবে। এই মোডটি মেসেজ প্রসেসিং এর উপর আরও নিয়ন্ত্রণ দেয় এবং ডেলিভারি নিশ্চিত করার জন্য সহায়ক।
বৈশিষ্ট্য:
উদাহরণ:
Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
DUPS_OK_ACKNOWLEDGE মোডে, অ্যাকনলেজমেন্ট প্রক্রিয়াটি একটু ধীরভাবে কাজ করে এবং এটি কিছুটা কম নির্ভরযোগ্য। এই মোডটি তখন ব্যবহৃত হয় যখন মেসেজ কনজিউমারের কাছে পুনরায় ডেলিভারির চেষ্টা হতে পারে, তবে এটি দখল করতে একটু বেশি সময় নেয়। কিছু পরিস্থিতিতে এটি মেসেজ ডুপ্লিকেট হওয়ার সম্ভাবনা তৈরি করতে পারে, তবে এটি উচ্চ পারফরম্যান্সের জন্য উপযুক্ত।
বৈশিষ্ট্য:
উদাহরণ:
Session session = connection.createSession(false, Session.DUPS_OK_ACKNOWLEDGE);
SESSION_TRANSACTED মোডে, মেসেজের প্রক্রিয়া ট্রানজেকশন হিসেবে পরিচালিত হয়। এটি মেসেজ প্রক্রিয়ার জন্য একাধিক মেসেজকে একত্রে প্রসেস করার সুযোগ দেয় এবং যদি কোনো মেসেজ প্রক্রিয়া ব্যর্থ হয়, তবে পূর্ববর্তী সমস্ত মেসেজকে রোলব্যাক করা হয়। এই মোডে, কনজিউমার ট্রানজেকশনের মাধ্যমে একাধিক মেসেজ অ্যাকনলেজ করতে পারে।
বৈশিষ্ট্য:
উদাহরণ:
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
অ্যাকনলেজমেন্ট মোড | বৈশিষ্ট্য | সুবিধা | ব্যবহার উপযুক্ত |
---|---|---|---|
AUTO_ACKNOWLEDGE | স্বয়ংক্রিয় অ্যাকনলেজমেন্ট | সহজ এবং দ্রুত | সাধারণ ব্যবহারের জন্য উপযুক্ত |
CLIENT_ACKNOWLEDGE | ম্যানুয়ালি অ্যাকনলেজমেন্ট | মেসেজ প্রক্রিয়ায় বেশি নিয়ন্ত্রণ | যেখানে কনজিউমার মেসেজ প্রক্রিয়াকে নিয়ন্ত্রণ করতে চায় |
DUPS_OK_ACKNOWLEDGE | মেসেজ ডুপ্লিকেট হওয়ার সম্ভাবনা | উচ্চ পারফরম্যান্স | দ্রুত এবং অস্থায়ী ডেটা প্রক্রিয়া |
SESSION_TRANSACTED | ট্রানজেকশনাল প্রক্রিয়া | উচ্চ নির্ভরযোগ্যতা এবং ডাটা নিরাপত্তা | মিশন-ক্রিটিক্যাল এবং ট্রানজেকশন ভিত্তিক অ্যাপ্লিকেশন |
অ্যাপাচি অ্যাকটিভএমকিউ-এর মেসেজ অ্যাকনলেজমেন্ট মোডগুলি বিভিন্ন পরিস্থিতির জন্য উপযুক্ত, এবং এগুলির সঠিক ব্যবহার সিস্টেমের পারফরম্যান্স, নির্ভরযোগ্যতা, এবং অ্যাটমিক অপারেশন নিশ্চিত করতে সহায়তা করে। AUTO_ACKNOWLEDGE
সাধারণ অ্যাপ্লিকেশনগুলির জন্য সহজ এবং স্বয়ংক্রিয়, CLIENT_ACKNOWLEDGE
কনজিউমারের মেসেজ প্রক্রিয়া নিয়ন্ত্রণে আনে, DUPS_OK_ACKNOWLEDGE
উচ্চ পারফরম্যান্স প্রদান করে, এবং SESSION_TRANSACTED
একটি ট্রানজেকশনাল সিস্টেমে নিরাপত্তা এবং ডেটা অখণ্ডতা নিশ্চিত করে।
common.read_more